【小ネタ】iTerm2でSSHログイン先別にコンソールの色を自動的に切替える
はじめに
アノテーション株式会社のあのふじたです。 世の中のエンジニアの皆さんは SSH でサーバに接続したとき、ターミナルの背景色を変えたくなりますよね。
Windows であればSSHクライアント側に背景色設定があります。 しかし Mac かつ iTerm2 で作業しているとちょっと面倒です。
弊社の過去記事
iTerm2でSSHログイン先別にプロファイルを自動的に切替えて事故防止する方法
を利用していたのですが ~/.ssh/config
のサーバ名とitrem2のプロファイル名を一致させる必要があり
サーバが増えるにつれてitrem2のプロファイルが増えることが手間でした。
今回の記事はscriptに直接記載しておく、または別ファイルで管理してプロファイル自体は使いまわせるようにした修正記事になります。
おまけでEC2自体に設定を入れる方法も書いておきました。
(0)事前準備 iTerm2 Profile 作成
まずは切り替える iTerm2 の Profile を作成します。 iTerm2->Preferences->Profiles と選択して今回は以下のように作成しました。
- SSH接続した際の標準プロファイル
ssh-default
- 本番環境(例:52.198.xxx.xxx)へ接続した際のプロファイル
ssh-prod
- 検証環境(例:54.248.xxx.xxx)へ接続した際のプロファイル
ssh-stg
- 開発環境(例:18.183.xxx.xxx)へ接続した際のプロファイル
ssh-dev
(1)クライアント側で切り替える場合の Script
基本的には ssh 実行時の args を正規表現でチェックするだけなので
ip のみではなく接続ユーザ名や ~/.ssh/config
に記述しているサーバ名でフックすることが可能です。
Script その1 Script に直接記述するパターン
~/bin/ssh-change-profile.sh
#!/bin/bash set -euo pipefail # Ctrl-C trap 'echo -ne "\033]1337;SetProfile=Default\a"; exit;' INT # 接続先とプロファイル PROFILE="ssh-default" CONFIG=( ec2-user,ssh-default 52.198.xxx.xxx,ssh-prod 54.248.xxx.xxx,ssh-stg 18.183.xxx.xxx,ssh-dev ) for i in "${CONFIG[@]}";do [[ "${*}" =~ ${i%%,*} ]] && PROFILE="${i//*,}" done # set profile echo -ne "\033]1337;SetProfile=${PROFILE}\a" # ssh login /usr/bin/ssh "$@" # set profile(default) echo -ne "\033]1337;SetProfile=Default\a"
Script その2 設定を外部ファイル(例 ~/.iterm2_hosts )で管理する場合
~/.iterm2_hosts
ec2-user,ssh-default 52.198.xxx.xxx,ssh-prod 54.248.xxx.xxx,ssh-stg 18.183.xxx.xxx,ssh-dev
~/bin/ssh-change-profile.sh
#!/bin/bash set -euo pipefail # Ctrl-C trap 'echo -ne "\033]1337;SetProfile=Default\a"; exit;' INT # 接続先とプロファイル PROFILE="ssh-default" CONFIG="${HOME}/.iterm2_hosts" [[ -f "${CONFIG}" ]] && while read -r i; do [[ "${*}" =~ ${i%%,*} ]] && PROFILE="${i//*,}" done < "${CONFIG}" # set profile echo -ne "\033]1337;SetProfile=${PROFILE}\a" # ssh login /usr/bin/ssh "$@" # set profile(default) echo -ne "\033]1337;SetProfile=Default\a"
その1かその2の script を作成後に実行権限付与します。
chmod +x ~/bin/ssh-change-profile.sh
.bash_profile
もしくは .zshrc
に書き込む
# bash echo "alias ssh='~/bin/ssh-change-profile.sh'" >>~/.bash_profile OR # zsh echo "alias ssh='~/bin/ssh-change-profile.sh'" >>~/.zshrc
.bash_profile
もしくは .zshrc
を反映
# bash source ~/.bash_profile OR # zsh source ~/.zshrc
あとは実際にログインして冒頭のGIF同様にプロファイルが切り替われば完了です。
(2)サーバー側で切り替える場合
切り替える iTerm2 の Profile(例:ec2-prod) は作成済とします。
- SSH接続した際の標準プロファイル
ssh-default
- 本番EC2(例:3.112.xxx.xxx)へ接続した際のプロファイル
ec2-prod
EC2側の設定(例:3.112.xxx.xxx)
SSH接続時のプロファイル設定を追加します。 SSHログアウト時に戻す設定も追加します。 尚、iterm2側にプロファイル設定がない場合は無視されます。
echo 'echo -ne "\033]1337;SetProfile=ec2-prod\a"' >>.bash_profile source .bash_profile echo 'echo -ne "\033]1337;SetProfile=Default\a"' >>.bash_logout
実際にログインし設定、ログアウト後に再度プロファイルが切り替わることを確認します。
この設定をansible等で各サーバーに配布しておくと漏れなく反映できます。
チームでiterm2のプロファイルを統一して設定しておけば、プロファイルが自動で切り替わるので精神衛生上とても良いと思います。
アノテーション株式会社について
アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。 「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。 現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。 少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。
最後に
気づけばJOINブログの次の投稿に1年以上経っておりました...。 2023年はもうちょっとペースを上げていきたいですね。
補足:この記事はほとんど濱田さんの記事 iTerm2でSSHログイン先別にプロファイルを自動的に切替えて事故防止する方法 の焼き直しです。
事前に書いていいですか?と聞いたところ問題なく了承頂けました。
またサーバ側に設定するアイデアについては植木さんからのご提供です。
濱田さん植木さんありがとうございました。